
package Online;

import Offline.Usuario;
import Ventanas.Ventana;
import Ventanas.VentanaInicio;
import Ventanas.VentanaMapa;
import java.awt.Cursor;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 * @author Alvaro Garcia Tapia
 * @author Pablo Mosquera Diaz
 * @author Victor Navarro Ortego
 * @author Adrian Neila Serrano
 * @author Daniel Sanchez Suarez
 * 
 * @proyecto Gestor de Tareas Online
 * @version 1.61
 */
public class Comprobar extends Thread{
    
   private String usuario;
   private Ventana frame;
   private boolean parar = false;
   private int listai;
   private int tareai;
   private VentanaMapa ventanamapa;
    
   public Comprobar(String usuario, Ventana frame, int listai, int tareai,VentanaMapa ventanamapa){
      this.usuario = usuario;
      this.frame = frame;
      this.listai = listai;
      this.tareai = tareai;
      this.ventanamapa = ventanamapa;
   }
   
   /**
     * Metodo para conectar las listas con la bbdd
     * @return La conexión con la bbdd
     */
    private Mensajes conectarMensajes(JFrame ventana){
        Mensajes mensaje = new Mensajes();
        boolean salir = false;
        //Si no se ha conectado
        while (!mensaje.estado() && !salir){
            ventana.setCursor(Cursor.WAIT_CURSOR);
            String message = "Fallo al conectar con el servidor.\n¿Desea volver a intentar conectar?";
            String title = "Error de conexión";
            //Se ofrece la opcion de reconectar
            int reply = JOptionPane.showConfirmDialog(null, message, title, JOptionPane.YES_NO_OPTION);
                ventana.setCursor(Cursor.DEFAULT_CURSOR);
            //Si rechazo reconectar
            if (reply == JOptionPane.NO_OPTION){     
                ventana.setCursor(Cursor.WAIT_CURSOR);
                salir=true;
                new VentanaInicio();
                //Se cierra la ventana de login
                ventana.setVisible(false);
                ventana.setDefaultCloseOperation(2); 
                ventana.setCursor(Cursor.DEFAULT_CURSOR);
            }
            //Si se acepto reconectar
            else{
                ventana.setCursor(Cursor.WAIT_CURSOR);
                //Se reconecta
                mensaje = new Mensajes();
                ventana.setCursor(Cursor.DEFAULT_CURSOR);
            }    
        }
        return mensaje;
    }
   
    /**
     * Metodo que comprueba si hay tareas recibidas nuevas
     * @return boolean
     */
   public boolean nuevos(){
       Mensajes mail;
       if(frame != null)
           mail = conectarMensajes(frame);
       else
           mail = conectarMensajes(ventanamapa);
       String [] mensajes = mail.getMensajesNuevos(usuario);
       if (mensajes == null){
           parar = false;
           return false;
       }
       else{
           parar = true;
           return true;
       }
   }
   
   /**
    * Metodo para parar de comprobar si hay tareas nuevas
    */
   public void parar(){
       parar = true;
   }
   
   /**
    * Metodo que ejecuta la comprobación constante de tareas nuevas
    */
   public void run(){
       Mensajes mail;
       while(!parar){
           try {
               if (!parar && nuevos()){
                   if (frame != null){
                        frame.ActualizarTablas(listai,tareai,null,true);
                   }
                   else{
                        ventanamapa.ActualizarTablas(listai,tareai,null);
                   }
                   parar = true;
               }
               Thread.currentThread().sleep(10000);
            } catch (InterruptedException ex) {
                Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
            }
       }
       
   }
}
